// 不支持输入五位以上连续的数字和字母的校验
import consecutiveFive from './consecutiveFive'
import { repeatRegex } from '@/reg';
/**
 * @category  自动生成密码
 * @description  自动生成密码包含数字、大小写字母、特殊符号的十位密码
 * @param
 * @example generatePassword() => string
 */
export default function generatePassword() {
    const symbols = '~!@#$%^&*)(_+}{|:?><'
    // 生成一个包含数字、小写字母、大写字母和符号的字符集
    const allChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + symbols
    let password = ''
    // 添加一个随机大写字母
    password += String.fromCharCode(Math.floor(Math.random() * 26) + 65)
    // 添加一个随机小写字母
    password += String.fromCharCode(Math.floor(Math.random() * 26) + 97)
    // 添加一个随机数字
    password += String.fromCharCode(Math.floor(Math.random() * 10) + 48)
    // 添加一个随机符号
    password += symbols[Math.floor(Math.random() * symbols.length)]
    // 生成其余的密码部分
    while (password.length < 10) {
        const randomChar = allChars[Math.floor(Math.random() * allChars.length)]
        // 检查是否会导致连续五次及以上的字符
        if (password.length >= 4) {
            const lastFourChars = password.substr(-4)
            // 不允许连续五次及以上的数字/字母
            if (!consecutiveFive(lastFourChars + randomChar)) {
                continue
                // 不允许重复五次及以上的数字/字母
            } else if (repeatRegex.test(lastFourChars + randomChar)) {
                continue
            }
        }
        password += randomChar
    }
    return password
}
